package io;

import java.io.*;

/**
 * java将流分为两类.节点流和处理流
 * 节点流:也成为低级流,特点:流的另一端是明确的,通过它我们知道数据从哪里来到哪里去
 *       低级流也是真实负责搬运数据的流,读写一定是建立在它的基础上进行的
 * 处理流:也成为了高级流,特点:不能独立存在,必须连接在其他流上,目的是当数据"流经"该流时
 *       对数据进行加工处理,简化我们的操作
 * 实际开发时,我们经常串组一组高级流到一个低级流上,在读写数据的过程中对数据进行流水线式
 * 的加工处理,这个过程也称为"流的连接".这也是IO的精髓所在
 *
 * 缓冲流
 * java.io.BufferedOutputStream和BufferedInputStream
 * 缓冲流是一对高级流,作用是提高读写数据的效率
 * 缓冲流内部有一个字节数组,默认长度是8K,缓冲流读写数据时一定是将数据的读写方式转换为
 * 块读写来保证读写效率
 */
public class CopyDemo {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("boss.jpg");
        BufferedInputStream bis=new BufferedInputStream(fis);
        FileOutputStream fos=new FileOutputStream("boss2.jpg");
        BufferedOutputStream bos= new BufferedOutputStream(fos);

        int d;
        long start=System.currentTimeMillis();
        while((d=bis.read())!=-1){
            bos.write(d);
        }
        long end=System.currentTimeMillis();
        System.out.println("复制完毕,用时"+(end-start)+"ms");
        bis.close();
        bos.close();
    }
}
